<?php
    class Upload{
        protected  $fileMine;//文件上传类型
        protected  $filepath;//文件上传路径
        protected  $filemax;//文件上传大小
        protected  $fileExt;//文件上传格式
        protected  $filename;//文件名
        protected  $fileerror;//文件出错设置
        protected  $fileflag;//文件检测
        protected  $fileinfo; //FILES
        protected  $ext;  //文件扩展
        protected  $path;
     
        //文件上传
        public function __construct($filename="file",$filemax=2 * 1024 * 1024,$filepath="/uploadfile",$fileflag=true,$fileExt=array("jpg","bmp","gif","png"),$fileMine=array('image/jpeg'))
        {
            $this->filename=$filename;
            $this->fileinfo=$_FILES[$this->filename];
            $this->filemax=$filemax;
            $this->filepath=$filepath;
            $this->fileflag=$fileflag;
            $this->fileExt=$fileExt;
            $this->fileMine=$fileMine;
            $this->rootPat = $_SERVER['DOCUMENT_ROOT'];
     
            //var_dump($this->filename);
     
        }
     
        //错误判断
        public function UpError(){
     
            if($this->fileinfo['error']>0){
                switch($this->fileinfo['error'])
                {
                    case 1:
                    $this->fileerror="上传文件大小超过服务器允许上传的最大值，php.ini中设置upload_max_filesize选项限制的值 ";
                        break;
                    case 2:
                        $this->fileerror="上传文件大小超过HTML表单中隐藏域MAX_FILE_SIZE选项指定的值";
                        break;
                    case 3:
                        $this->fileerror="文件部分被上传";
                        break;
                    case 4:
                        $this->fileerror="没有选择上传文件";
                        break;
                    case 5:
                        $this->fileerror="未找到临时目录";
                        break;
                    case 6:
                        $this->fileerror="文件写入失败";
                        break;
                    case 7:
                        $this->fileerror="php文件上传扩展没有打开 ";
                        break;
                    case 8:
                        $this->fileerror="";
                        break;
 
                }
                return false;
            }
            return true;
     
        }
     
        //检测文件类型
        public function UpMine(){
            if(!in_array($this->fileinfo['type'],$this->fileMine)) {
                $this->error="文件上传类型不对";
                return false;
            }
            return true;
     
        }
        //检测文件格式
        public function UpExt(){
            $this->ext=pathinfo($this->fileinfo['name'],PATHINFO_EXTENSION);
            //var_dump($ext);
            if(!in_array($this->ext,$this->fileExt)){
                $this->fileerror="文件格式不对";
                return false;
            }
           return true;
        }
        //检测文件路径
        public function UpPath(){
            $path = $this->filepath;
            if(!file_exists($this->rootPat . $path)){
                mkdir($this->filepath,0777,true);
            }

            $path = $path . "/" . date("Ym");
            if(!file_exists($this->rootPat . $path)){
                mkdir($path,0777,true);
            }

            $this->filepath = $path;
        }
        //检测文件大小
        public function UpSize(){
            $max=$this->fileinfo['size'];
            if($max>$this->filemax){
                $this->fileerror="文件过大";
                return false;
            }
            return true;
        }
        //检测文件是否HTTP
        public function UpPost(){
            if(!is_uploaded_file($this->fileinfo['tmp_name'])){
                $this->fileerror="恶意上传";
                return false;
            }
            return true;
        }
        //文件名防止重复
        public function Upname(){
            return md5(uniqid(microtime(true),true));
        }
     
        //图片缩略图
        public function Smallimg($x=100,$y=100){
            $imgAtt=getimagesize($this->path);
            //图像宽，高，类型
            $imgWidth=$imgAtt[0];
            $imgHeight=$imgAtt[1];
            $imgext=$imgAtt[2];
            //等比列缩放
     
            if(($x/$imgWidth)>($y/$imgHeight)){
                $bl=$y/$imgHeight;
            }else{
                $bl=$x/$imgWidth;
            }
            $x=floor($imgWidth*$bl);  //缩放后
            $y=floor($imgHeight*$bl);
            $images=imagecreatetruecolor($x,$y);
            $big=imagecreatefromjpeg($this->path);
            imagecopyresized($images,$big,0,0,0,0,$x,$y,$imgWidth,$imgWidth);
            switch($imgext){
                case 1:
                    $imageout=imagecreatefromgif($this->path);
                    break;
                case 2:
                    $imageout=imagecreatefromjpeg($this->path);
                    break;
                case 3:
                    $imageout=imagecreatefromgif($this->path);
                    break;
            }
            $im=imagejpeg($images,$this->path);
        }
     
        //文件上传
        public function uploads()
        {
            if($this->UpError()&&$this->UpMine()&&$this->UpExt()&&$this->UpSize()&&$this->UpPost()){
                $this->UpPath();
                $names=$this->Upname();
                $this->path=$this->filepath.'/'. $names.'.'.$this->ext;
                $return = array();
     
                if(move_uploaded_file($this->fileinfo['tmp_name'], $this->rootPat . $this->path)){
                    $return["flag"] = 1;
                    $return["path"] = $this->path;
                    $return["msg"] = "上传成功";
                    return $return;
                }else{
                    $this->fileerror="上传失败";
                }
            }
            
            $return["flag"] = 0;
            $return["msg"] = $this->fileerror;
            return $return;
        }
    }
?>